package com.xteam.ecsystem.dao;

import java.util.List;

import com.xteam.ecsystem.entities.BaseCartInfo;
import com.xteam.ecsystem.entities.BaseModePayment;
import com.xteam.ecsystem.entities.BaseOrderGoods;
import com.xteam.ecsystem.entities.BaseOrderInfo;
import com.xteam.ecsystem.utils.PageCenterStation;

/**
 * 
 * 订单访问接口
 * @author ls
 *
 */
public interface IFrontOrderDao {

	/**
	 * 
	 * 根据用户ID返回订单列表
	 * @author ls
	 * @param pageIndex
	 * @param pageSize
	 * @param memberId
	 * @return
	 */
	public PageCenterStation<?> getOrderListByMemberId(int pageIndex, int pageSize, String memberId);

	/**
	 * 获取价格变化的商品
	 * @author ls
	 * @param userId
	 * @return
	 */
	public List<?> getPriceChange(String userId);

	/**
	 * 
	 * 保存订单信息并将购物车中商品移至订购商品表
	 * @author ls
	 * @param boi
	 */
	public BaseOrderInfo saveOrderInfo(BaseOrderInfo boi);

	/**
	 * 保存订购商品信息
	 * @author liuzhi 2014-1-9
	 * @param bog
	 */
	public void saveOrderGoods(List<BaseOrderGoods> list);
	
	/**
	 * 删除购物车中的商品
	 * @author liuzhi 2014-1-9
	 * @param list
	 */
	public void deleteCartGoods(List<BaseCartInfo> list);
	
	/**
	 * 获取邮费信息
	 * @author ls
	 * @return
	 */
	public List<?> getPostAgeList();

	/**
	 * 用户中心 - 取消订单
	 * @author liuzhi Mar 28, 2013
	 * @param orderId
	 */
	public void saveCancelOrder(String orderId);
	
	/**
	 * 根据用户ID获得可被合并的订单列表
	 * @author liuzhi Mar 29, 2013
	 * @param userId
	 * @return
	 */
	public List<?> getMergeOrders(String userId);
	
	/**
	 * 根据订单编号获得订单信息
	 * @author liuzhi Mar 29, 2013
	 * @param orderId
	 * @return
	 */
	public BaseOrderInfo getOrderInfo(String orderId);
	
	/**
	 * 保存合并订单
	 * @author liuzhi Mar 29, 2013
	 * @param mainOrderInfo
	 * @param fellowOrderInfo
	 * @return
	 */
	public boolean saveMergeOrders(BaseOrderInfo mainOrderInfo, BaseOrderInfo fellowOrderInfo);
	
	/**
	 * 根据订单编号获得订购商品列表
	 * @author liuzhi Mar 29, 2013
	 * @param orderId
	 * @return
	 */
	public List<?> getOrderGoods(String orderId);
	
	/**
	 * 
	 * 获取支付方式信息
	 * @author ls
	 * @param type
	 * @return
	 */
	public List<?> getPayModeList(int type);

	/**
	 * 
	 * 是否支持货到付款
	 * @author ls
	 * @param braDistrict
	 * @return
	 */
	public boolean isCashOnDelivery(String braDistrict);

	/**
	 * 
	 * 通过ID获取支付方式信息
	 * @author ls
	 * @param id
	 * @return
	 */
	public BaseModePayment getPayModeById(String id);
	
	/**
	 * 保存订单中的收货人信息
	 * @author liuzhi Apr 3, 2013
	 * @param boiObj
	 */
	public void saveOrderConsignee(BaseOrderInfo boiObj);
	
	/**
	 * 前端首页 - 用户查询订单
	 * @author liuzhi Apr 24, 2013
	 * @param boiOsn
	 * @return
	 */
	public BaseOrderInfo getOrderByBoiOsn(String boiOsn);

	/**
	 * 查询用户可用的购物券
	 * 
	 * 符合以下条件即可查询相应的购物券：
	 *  1、系统已开启购物券功能
	 * 	2、登录用户
	 * 	3、用户已拥有不同数额的购物券（一张或多张）
	 * 	4、符合购物券使用规则
	 * 
	 * 下单时若使用购物券：
	 * 	1、一次只允许使用一张购物券
	 * 	2、插入购物券使用日志
	 *  3、用户购物券数量执行减少
	 *  4、插入订单与购物券使用记录
	 * 
	 * @author liuzhi 2014-1-3
	 * @param userId
	 * @param goodsTotal
	 * @return
	 */
	public String getUserCoupons(String userId, String goodsTotal);
	
}
